/**
 * @addtogroup jtc_msg_808
 * jtc_msg_808_2019
 * @{
 */
 /**
 * @file         jtc_msg_808_2019.h
 * @brief        交通部消息2019版本
 * @note    
 * @author       Akee
 * @date         2019-11-6
 * @version      1.0
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author          <th>Description
 * <tr><td>2019-11-6   <td>1.0                   <td>Akee            <td>创建初始版本
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */
#ifndef _JTC_MSG_808_2019_H_
#define _JTC_MSG_808_2019_H_
#include "jtmsg808/jtc_msg_808.h"
#include "ofc/ofc_indefine_list.h"
#include "mfc/mfc_string.h"
#include "jtmsg808/jtc_msg_808_2013.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
 * 查询服务器时间请求(0x0004)
 ******************************************************************************
 */
typedef struct TJtMsg808QueryServerTimeTag TJtMsg808QueryServerTime;
struct TJtMsg808QueryServerTimeTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808QueryServerTimeCreate(TJtMsg808QueryServerTime *self);

/**
 * 查询服务器时间应答(0x8004)
 ******************************************************************************
 */
typedef struct TJtMsg808QueryServerTimeRespTag TJtMsg808QueryServerTimeResp;
struct TJtMsg808QueryServerTimeRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

    Byte time_bcd[6];
PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808QueryServerTimeRespCreate(TJtMsg808QueryServerTimeResp *self);

/**
 * 终端注册(0x0100)
 ******************************************************************************
 */
typedef struct TJtMsg808V19TrmRegisterTag TJtMsg808V19TrmRegister;
struct TJtMsg808V19TrmRegisterTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    Word province_id;                   ///< 省域id | 标示终端安装车辆所在的省域，0保留，由平台取默认值。省域id采用GB/T 2260中规定的行政区划代码六位中前两位
    Word city_id;                       ///< 市县域id | 标示终端安装车辆所在的市域和县域，0保留，由平台取默认值。市县域id采用GB/T 2260中规定的行政区划代码六位中后四位
    Byte manufacture_id[11];            ///< 制造商id | 五个字节，终端制造商编码
    Byte model[30];                     ///< 终端型号 | 二十个字节，此终端型号由制造商自行定义，位数不足时，后补"0X00"。
    Byte trm_id[30];                    ///< 终端id | 七个字节，由大写字母和数字组成，此终端id由制造商自行定义，位数不足时，后补"0X00"。
    Byte vehicle_color;                 ///< 车牌颜色 | 车牌颜色，按照JT/T415-2006的5.4.12，未上牌时，取值为0。
    TMfString vehicle_no;               ///< 车牌 | 车牌颜色为0 时，表示车辆VIN；否则，表示公安交通管理部门颁发的机动车号牌

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808V19TrmRegisterCreate(TJtMsg808V19TrmRegister *self);

/**
 * 终端鉴权(0x0102)
 ******************************************************************************
 */
typedef struct TJtMsg808V19TrmAuthTag TJtMsg808V19TrmAuth;
struct TJtMsg808V19TrmAuthTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    TMfString auth_code;              ///< 鉴权码 | 终端重连后上报鉴权码
    Byte imei[15];                    ///< 终端IMEI
    Byte soft_ver[20];                ///< 厂家自定义版本号，位数不足时，后补"0x00"

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808V19TrmAuthCreate(TJtMsg808V19TrmAuth *self);

/**
 * 制造TJtMsg808V19TrmAuth消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @param auth_code: 鉴权码
 * @param auth_code_len: 鉴权码长度
 * @param imei: sim卡的imei号
 * @param soft_ver: 终端的软件版本号
 * @return 消息指针
 */
TJtMsg808V19TrmAuth * JtMakeMsg808V19TrmAuth(const char *auth_code, Int32 auth_code_len, const char *imei, const char *soft_ver);

/**
 * 查询终端属性应答(0x0107)
 ******************************************************************************
 */
typedef struct TJtMsg808V19GetTrmAttrRespTag TJtMsg808V19GetTrmAttrResp;
struct TJtMsg808V19GetTrmAttrRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    Word type;                          ///< 终端类型 | bit0，0：不适用客运车辆，1：适用客运车辆；bit1，0：不适用危险品车辆，1：适用危险品车辆；bit2，0：不适用普通货运车辆，1：适用普通货运车辆；bit3，0：不适用出租车辆，1：适用出租车辆；bit6，0：不支持硬盘录像，1：支持硬盘录像；bit7，0：一体机，1：分体机。
    Byte manufacture_id[5];             ///< 制造商id | 五个字节，终端制造商编码
    Byte model[30];                     ///< 终端型号 | 二十个字节，此终端型号由制造商自行定义，位数不足时，后补"0X00"
    Byte trm_id[30];                    ///< 终端id | 七个字节，由大写字母和数字组成，此终端id 由制造商自行定义，位数不足时，后补"0X00"。
    Byte sim_iccid[10];                 ///< 终端SIM 卡ICCID | 终端SIM 卡ICCID 号
    TMfString hw_ver;                   ///< 终端硬件版本号 | 
    TMfString sw_ver;                   ///< 终端固件版本号 | 
    Byte gnss_mod_attr;                 ///< GNSS 模块属性 | bit0，0：不支持GPS 定位， 1：支持GPS 定位；bit1，0：不支持北斗定位， 1：支持北斗定位；bit2，0：不支持GLONASS 定位， 1：支持GLONASS 定位；bit3，0：不支持Galileo 定位， 1：支持Galileo 定位
    Byte gsm_mod_attr;                  ///< 通信模块属性 | bit0，0：不支持GPRS通信， 1：支持GPRS通信；bit1，0：不支持CDMA通信， 1：支持CDMA通信；bit2，0：不支持TD-SCDMA通信， 1：支持TD-SCDMA通信；bit3，0：不支持WCDMA通信， 1：支持WCDMA通信；bit4，0：不支持CDMA2000通信， 1：支持CDMA2000通信。bit5，0：不支持TD-LTE通信， 1：支持TD-LTE通信；bit7，0：不支持其他通信方式， 1：支持其他通信方式

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808V19GetTrmAttrRespCreate(TJtMsg808V19GetTrmAttrResp *self);

/**
 * 链路检测(0x8204)
 ******************************************************************************
 */
typedef struct TJtMsg808LinkDetectionTag TJtMsg808LinkDetection;
struct TJtMsg808LinkDetectionTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808LinkDetectionCreate(TJtMsg808LinkDetection *self);

/**
 * 文本信息下发(0x8300)
 ******************************************************************************
 */
typedef struct TJtMsg808V19TextMsgTag TJtMsg808V19TextMsg;
struct TJtMsg808V19TextMsgTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    Byte flag;                        ///< 标志 | 文本信息标志位含义见表7-25
    Byte text_type;                   ///< 文本类型 | 1 = 通知,2 = 服务,参考TJtMsg808V19TextTypeEnum
    TMfString text_msg;               ///< 文本信息 | 最长为1024字节，经GBK编码

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808V19TextMsgCreate(TJtMsg808V19TextMsg *self);

/**
 * 车辆控制(0x8500)
 ******************************************************************************
 */
typedef struct TJtMsg808V19VehicleCtrlTag TJtMsg808V19VehicleCtrl;
struct TJtMsg808V19VehicleCtrlTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    TMfString data;                   ///< 数据流

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808V19VehicleCtrlCreate(TJtMsg808V19VehicleCtrl *self);

/**
 * 设置圆形区域(0x8600)
 ******************************************************************************
 */
typedef struct TJtMsg808V19SetCircleZoneTag TJtMsg808V19SetCircleZone;
struct TJtMsg808V19SetCircleZoneTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    TMfString data;                   ///< 数据

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808V19SetCircleZoneCreate(TJtMsg808V19SetCircleZone *self);

/**
 * 设置矩形区域(0x8602)
 ******************************************************************************
 */
typedef struct TJtMsg808V19SetRectZoneTag TJtMsg808V19SetRectZone;
struct TJtMsg808V19SetRectZoneTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    TMfString data;                   ///< 数据

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808V19SetRectZoneCreate(TJtMsg808V19SetRectZone *self);

/**
 * 设置多边形区域(0x8604)
 ******************************************************************************
 */
typedef struct TJtMsg808V19SetPolygonZoneTag TJtMsg808V19SetPolygonZone;
struct TJtMsg808V19SetPolygonZoneTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    TMfString data;                   ///< 数据

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808V19SetPolygonZoneCreate(TJtMsg808V19SetPolygonZone *self);

/**
 * 设置路线(0x8606)
 ******************************************************************************
 */
typedef struct TJtMsg808V19SetLineTag TJtMsg808V19SetLine;
struct TJtMsg808V19SetLineTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    TMfString data;                   ///< 数据

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808V19SetLineCreate(TJtMsg808V19SetLine *self);

/**
 * 查询区域或线路数据(0x8608)
 ******************************************************************************
 */
typedef struct TJtMsg808QueryZoneDataTag TJtMsg808QueryZoneData;
struct TJtMsg808QueryZoneDataTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    TMfString data;                   ///< 数据

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808QueryZoneDataCreate(TJtMsg808QueryZoneData *self);

/**
 * 查询区域或线路数据应答(0x0608)
 ******************************************************************************
 */
typedef struct TJtMsg808QueryZoneDataRespTag TJtMsg808QueryZoneDataResp;
struct TJtMsg808QueryZoneDataRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    TMfString data;                   ///< 数据

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808QueryZoneDataRespCreate(TJtMsg808QueryZoneDataResp *self);

/**
 * 驾驶员身份信息采集上报(0x0702)
 ******************************************************************************
 */
typedef struct TJtMsg808V19GetDriverRespTag TJtMsg808V19GetDriverResp;
struct TJtMsg808V19GetDriverRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    Byte state;                       ///< 状态 | 0x01：从业资格证IC 卡插入（驾驶员上班）；0x02：从业资格证IC 卡拔出（驾驶员下班）。
    Byte time[6];                     ///< 时间 | 插卡/拔卡时间，YY-MM-DD-hh-mm-ss；以下字段在状态为0x01 时才有效并做填充。
    Byte read_result;                 ///< IC 卡读取结果 | 0x00：IC 卡读卡成功；0x01：读卡失败，原因为卡片密钥认证未通过；0x02：读卡失败，原因为卡片已被锁定；0x03：读卡失败，原因为卡片被拔出；0x04：读卡失败，原因为数据校验错误。以下字段在IC 卡读取结果等于0x00 时才有效。
    TMfString name;                   ///< 驾驶员姓名 | 驾驶员姓名，长度n
    Byte pass_code[20];               ///< 从业资格证编码 | 长度20位，不足补0x00
    TMfString gov_dept;               ///< 发证机构名称 | 从业资格证发证机构名称
    Byte lot_date[4];                 ///< 证件有效期 | YYYYMMDD
    Byte driver_id_no[20];            ///< 驾驶员身份证号 | 长度为20字节，不足补0x00

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808V19GetDriverRespCreate(TJtMsg808V19GetDriverResp *self);



#ifdef __cplusplus
} // extern "C" {
#endif

#endif
/**
 * @} 
 */

